{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 机器学习100天——第13天：支持向量机 (SVM)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第一步：导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第二步：导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dataset = pd.read_csv('../datasets/Social_Network_Ads.csv')\n",
    "X = dataset.iloc[:, [2, 3]].values\n",
    "y = dataset.iloc[:, 4].values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第三步：拆分数据集为训练集合和测试集合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第四步：特征量化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "sc = StandardScaler()\n",
    "X_train = sc.fit_transform(X_train)\n",
    "X_test = sc.fit_transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第五步：适配SVM到训练集合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',\n",
       "  max_iter=-1, probability=False, random_state=0, shrinking=True,\n",
       "  tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "classifier = SVC(kernel = 'linear', random_state = 0)\n",
    "classifier.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第六步：预测测试集合结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_pred = classifier.predict(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第七步：创建混淆矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "cm = confusion_matrix(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第八步：训练集合结果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEWCAYAAABmE+CbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXt4HWd54H/vkexjO3bsoMSSndgxeogVQ0KdkkIcxEqN\nAw2XcAu7T1JBG1rqwm4LBFgWUFMuu9puKQu40C0YcwnEJQ8k0GJIKMG1RFycQACTEGQ7qWI7wZYc\ni1ixY1u2dN79Y86Rz2XmaEYzc2bO0ft7Hj3S+c6cb96R7O/9vvcqqophGIZhZJIWwDAMw0gHphAM\nwzAMwBSCYRiGkccUgmEYhgGYQjAMwzDymEIwDMMwAFMIxixCRL4uIq+Pae5bReRzUV+bFCJyi4j0\nJS2HUVvE8hCMWiIincDHgRcAk8Ag8G6gCdgGtKrq8bLP/AL4IvBd4HFgl6peUfT++cBB4KCqrvK4\n7wuBO/L3/SDwofxbzcAc4GT+9X5VfUHoB60jRORaYHPx705EFgCPAi9U1dGkZDNqi50QjJohIufi\nLOqfAZ4DXAh8FBhX1fuBJ4E3lX3mMuD5wNeLhhfkxwv8IY6iqMafA1vU4X+r6kJVXQi8HdhZeO2m\nDESkOdCDNgCqegL4AfCWpGUxaocpBKOWrAZQ1a+r6qSqnlTVH6jqQ/n3bwP+qOwzfwTcXbZL/Rrw\nx2XXfHWae78SGPAjpIg0i4iKyH8VkceA3fnxz4rIkyLyjIj8VESuLvrM/xKRr+R/fl7+83+Uv/4p\nEfnADK9dICK3i8hREfm1iHxARPZ5yJ0Rkb8XkcMiMiYiD4nI8/PvzRORT4rIEyIyIiL/Lz+2GNgK\nrBSR4/mvpfkp+4FX+/mdGY2BKQSjluwFJkXkNhF5pYicV/b+14D/JCIrwFngcHb/t5Vddztwo4g0\n5Re8hcADXjcVkXOA5wJ7Asr7WuD3gMvzrx8AXohzurkT+KaIZKt8/mrgecAfAB8VkUtmcO3HgOXA\nqvx7b64yxyuBq4BLgPOAG4Hf5t/7O5zfwQvz768CelV1DLgeOFB0Sjqc/8wg8DtV7mc0GKYQjJqh\nqs8AnYACXwCeEpHviEhr/v0ncHalBTPFeiALfK9sqidxFvdrcU4HX5vm1kvy348FFPl/q+rTqnoy\nL9/XVPW3qjqB4wc5F2cR9+IjqnpKVX8OPEL1xdXr2v8C9Knq0fzv57NV5jiTl+nSvLy/VtXhvGL9\nM+Dd+ed5BvgbHIVRjWOc/d0ZswBTCEZNUdVBVb1ZVS8CLsPZ/X666JLbOKsQ3gLcoapnXKb6KnAz\ncBPTK4Sj+e+LAor7RPELEXm/iOwWkTHgaeAc4HyvD6vqcNHLEzgnmaDXLiuTo0Smsjl+AHwO+Edg\nREQ+JyKLgDYcxfrLvOnpKI4vZ6nXXHkWcfZ3Z8wCTCEYiaGqu4Gv4CiGAt8CLhKR3wfeSKW5qMBd\nOPbtIVU9MM19ngX+g7wPI4iIhR/y8rwHuAFn13wecByQgHMGZRi4qOj1imoXq+qnVfV3cX6nz8eR\neQQ4DXSo6pL812JVXVz4mMd0a4BfhpLeqCtMIRg1Q0QuFZH3ishF+dcrcHb49xeuyS/edwJfxgkB\nfdBtrvx11wBv83n7u4GuEOIvAiaAIzhhqh/BOSHEzTeAD4nIkvzv7b95XSgiL85/NQPP4iiBnKpO\nApuBT4vIBeJwkYi8Iv/REeD8/GmimC7gnsifyEgtphCMWnIMeAnwgIg8i6MIfgW8t+y624CLmSZy\nSFUfVNX/8HnvTUCPiMx0R3838EOc2Px9wDPAoRnOFYQP4yzY+3DCQL8BjHtcuwQnX+No/vpDwCfz\n770X2A/8BBjLz3UJgKr+CufEtS9vUloqIvOB65g+estoICwxzZg1iMg/Ad9Q1X9OWpaZIiJ/Cbxe\nVdfHfJ9bgAtU9UPTXmw0DKYQDCPFiMiFOKel+4EOnIirT6pqtWgjw5gRsy4D0zDqjCxOiO4qnMim\nrwOfT1Igo3GxE4JhGIYBmFPZMAzDyFNXJqPz58zRVfPmJS1GXfKzRcdZmPXMizIMo4E5vu/4EVW9\nYLrr6kohrJo3jwevvDJpMeqSTFc/z3Kcrud2Jy2KYRg1pv/m/v1+rjOT0SwhN9BNUw4GHu9PWhTD\nMFKKKYRZxJn7ugFTCoZhuGMKYZaRG+gGTCkYhlFJXfkQjGjIDXST6epn4PF+8ykYhg8WNi3kxpU3\nsmz+MjIp3UfnyHHo5CHuOHAHxyePT/8BF0whzFJMKRiGf25ceSOXXXQZ2UVZZl4OK15UlZZjLdzI\njWx+fPOM5kinqjNqwpT5aJ+vzpKGMWtZNn9ZqpUBgIiQXZRl2fxlM57DFMIsJzfQDarsOLAjaVEM\nI7VkyKRaGRQQkVAmrcQUQr7B909E5Jci8oiIfDQpWWY7uY1LmJycYNfwrqRFMQwjQZI8IYwD16jq\n7wBrgetE5KoE5Zm9rF3L4lMwdvKoKQXDSDH3bbuP6666jlf83ivYtHFT5PMnphDUoeAKn5P/skp7\nCfH0A9107RfGTloLXcNII5OTk3zsAx/jC3d8ge/++3f53re/x2N7Hov0Hon6EESkSUR2AYeBe1X1\nAZdrNojIgyLy4FNn3HqtG1GxfV8XXfvFchQMIySL7txK+xXXsHrpGtqvuIZFd24NPedDP3+IlatW\nsmLVCubOncurXv8qtt2zLQJpz5KoQlDVSVVdi9NE/MUicpnLNZtU9UpVvfKCOXNqL+QsY/s+p+2w\nKQXDmBmL7txK23tuZc6TBxFV5jx5kLb33BpaKYwcGmHZhWcjiNqWtzFyaCSsuCWkIspIVY8C23F6\nuBoJY9nMhjFzLuj7FJmTp0rGMidPcUHfpxKSyD9JRhldICJL8j/PB14O7E5KHqMUUwqGMTOaf3Mo\n0LhfWpe1cqhojuGDw7Quaw01ZzlJnhCWAdtF5CHgpzg+hO8mKI9RRkEpWI6CYfhn4kL3xDCvcb9c\nfsXl7H98P0/uf5LTp09z9z/fzTXXXRNqznKSjDJ6SFWvUNUXquplqvqxpGQxvMn1NTM5OWFKwTB8\n8lTvLeTmlzbyys2fx1O9t4Sat7m5mVv/5lb+9L/8Ka9+6at55WtfySWXXhJqzop7RDqb0Xh0dpLr\n20GmdyJpSQyjLjj2pusBx5fQ/JtDTFy4jKd6b5kaD0PXy7voenlX6Hm8MIVgTE9nJ137BxjACuEZ\nhh+Oven6SBRArUlFlJGRfrbv62LxKXMyG0YjYwrB8M3TD1gbTsNoZEwhGIGwNpyG0biYQjACYzkK\nhtGYmEIwZoQpBcNoPEwhGDPGlIJh1JYPvfNDXL3maq5/WTwRTKYQjFCYUjCM2vGGG9/AF+74Qmzz\nm0IwQpPbuAQwpWAYBbbu3co1t13Dmn9YwzW3XcPWveHLXwP83tW/x+LzFkcylxumEIzwrF07dVIw\njNnO1r1buXX7rRw8fhBFOXj8ILduvzUypRAnphCMyCjkKFgbTmM286mdn+LURGn561MTp/jUTit/\nbcwiztznJK5ZG05jNnPouHuZa6/xNGEKwYgUS1wzZjvLFrqXufYaTxOmEIzIscgjYzZzy7pbmNdc\nWv56XvM8blkXrvw1wHs2vIebXnkTjz/2OF0v7OLO2+8MPWcxVu3UiIXcQDeZrn4GHrcKqcbs4vrV\nTo7Ap3Z+ikPHD7Fs4TJuWXfL1HgYPrnpk6HnqIYpBCM2TCnMbkaOjzD09BDjk+Nkm7K0n9dO68Jo\nWz6mletXXx+JAqg1phCMWIlbKTTCotMIz1DOyPER9ozuIac5AMYnx9kzugeg7p+tkTGFYMROQSn0\nP95Ptjkb2cLXCItOIzyDG0NPD009U4Gc5hh6eqgunytHDlVFRJIWpSqqSo7c9Bd6YE5loyZ8bXAN\n4Cx4he97RvcwcnxkxnNWW3TcGDk+ws4ndtK/r5+dT+wMde+oCPoM9ULh7+x3PO0cOnmI8WPjqGrS\noniiqowfG+fQyZmHt9oJwagJve1DULa5CrtjDLLopHUn3ggLp5vJK9uUdX2GbFM2AQnDc8eBO7iR\nG1k2fxmZlO6jc+Q4dPIQdxy4Y8ZzmEIwasKBbPQLX5BFJ60mjHpfOL0Ubds5bQw/O1zyO89Ihvbz\n2pMSNRTHJ4+z+fHNSYsRO+lUdUbDsXLcfYELs/C1n9dORkr/CXstOkF34rUyLwV5hjTipWhHT47S\n0dIx9ffNNmXpaOmoS//BbMJOCEZN6BtqZ0PHHk40FS0eSqiFr7C4+InQCbITr6V5KcgzpJFqirZ1\nYWvFcyQdUZX0/dOOKQSjJvQcdv7T9bYPcSA7zsrxLPuz4+x+ajDUf0i3RceN9vPaSxZ58N6J19q8\n5PcZ0khaFa0bSd+/HjCFYNSMnsOtU4qhQK0S14LsxKNw9M6WnWiaFW3a7l8PmEIwEmUqcW3fAF2r\numK9l9+deFhHb73tRNf/eIS33TXE0tFxDrdk2XxDO9uu9idnrRVtGJK+fz1gCsFInFoqBT8E2fW6\nUU870fU/HuF9X9nDvNOOvG2j47zvK47yCqIUaqFow5L0/euBxKKMRGSFiGwXkV+LyCMi8q6kZDGS\nJ7dxCaimorlO68LWUBEyce5Eo45+ettdQ1PKoMC80znedlf0iXFJR1Qlff96IMkTwgTwXlX9uYgs\nAn4mIveq6q8TlMlIirVryfXtINObjuY6YRy9ce1E4zBFLR0dZ8vl0LseDiyGlWPQtw1uejga5VVu\nSupo6UjMt1LvEV21IDGFoKqHgEP5n4+JyCBwIWAKoY7YsnSkJHKob6i9wnHsm85OuvYPMEDy1VHD\nOIXDmpy8iMMU9bmrmvjv10xyYq7zev8S2HA9jJ3TFEpWL+XV0dLBuhXrQs0dhnqO6KoFqUhME5FV\nwBXAAy7vbRCRB0XkwafOnKm1aEYVtiwdYUPHHvbPG0cF9s8bZ0PHHrYsnbkZY/u+LhafSra5TmEx\nm2ndpbAmJy/iMEV96FqZUgYFTsx1xsPQqDWaGp3EncoishC4C3i3qj5T/r6qbgI2AVy5aFF6K0vN\nQnrbh0oTzYATTTl624d8nxLcThhPP9DNeS+pDEetVShnFDvxOHaicZiixponAo37xSJ66pNEFYKI\nzMFRBltU9VtJymIEx6s+kdd4OYUTRkGpFE4YAE8/0M2cl51VCrUM5Qy6mO09speDxw9OvV6+cDmr\nz18dqUwQjykqCiXjFra6c4VF9NQjiSkEcQqLfxEYVNV4+8IZsbByPMv+eZX/6b3qFpUz3QnjzH1n\nm+vMbc7WLJQzyCJZrgyAqddhlEK13IAoT0kt81sq5C+M+5XTLWz1l+9o41vPib643WxJ+EuKJH0I\nLwXeAlwjIrvyX69KUB4jIH1D7SyYLP0ntGAyQ9+Qv//0fk4YuYFuAMYnameCCBKe6LaYVhv3Q2GR\nbRsdJ8PZRXb9j0doXdjKuhXr6F7VzboV60IvhqMnRwONl+MVtvqZ26MvbhfWt2NMT5JRRjuoqJBv\n1BNu9YmCRBn5PWHkBrqRrn7XOeIwQSQdnlgtN8AtWSzMrjmsrX/pqPt1S0fdi9uFoZ4S/uqVxJ3K\nRn3jVp/IL24VUL1OGLd/fz5vvu5kyRYizqSiJMMTqy2y5YT1rTRJE5M66Truh8MtWdpc5DrcEr2i\nNkd1/KQi7NSYnfQcbmXTng4uPpVFFC4+lWXTng5XBdMz/yXcPrgG8nFmaamvv3zh8kDjfjjckmXL\n5bDq3ZD5sPN9y+Xui2zY8E6vHsF+ewdvvqGdU3NLl5FTczNsviF6Re11GjRHdXTYCcFIlCAnjJ7D\nrfzFcwcZmwfz58xPXBnAWcdxlFFGf/nmFu4+52BFstirnq109IbdNU/k3MNLvcbLKZiwZlocLwhx\nJfwZZzGFYNQVhRyFMdJR4gIcpRBlmOnW80cZL7PinJgLW+ePUp7jGzZsNIqw021Xt8aiAMpJ2rcz\nGzCTkVF3PP1AN5BsNnOcBNn1hy3YVm8F36KOsjJKMYVg1CWFcNSwSqFWvZODEMRWHrZMRlxlNoz6\nxExGRt0y1Udhhh3XRo6PsPvIbjTvqR6fHGf3kd1Aso1sgtrKw0ZEpbXgmyWh1R47IRh1TZiTwqO/\nfXRKGRRQlEd/+2gEks0c27VbElpS2AnBiJxIS2L7YKYnhbARNnGS1l17rbAktGSwE4IRKXGUxPZD\nVD6FmZBGP0S9Y0loyWAKwYiUagXr4iaoUvDKxvWbpQtm2ogLS0JLBlMIRqSELYldjS1LR1h11U4y\nXf2sumqn66ljSinsG5h2vtUt7rkDXuNuWCOYeKi3cNhGwXwIRqSELYntRbXeCeX+iVxfM5neCXYc\n2EHnyk7POaNIdGoE00Yao3ksCS0ZplUIIvKXwO2q+nQN5DHSzMgIDA3B+Dhks9DeDq2l/0GDFKzz\nws0pHag7W2cnuY27yLwr/mzmOLqY1ZJaNh4Kymx3rCeBH5NRK/BTEfmGiFwnfqteGY3FyAjs2eMo\nA3C+79njjBcRpGCdG15O6f1BTVFr1wLV/QlR2P/Tatrw6+g2k5dRzLQnBFX9KxG5FXgF8FbgsyLy\nDeCLqvofcQtopIShIciVLhzkcs542SkhUEnsslNH7zsnXU8CkgN12Yo854y3A3i6cNSoeicX5kqL\naSPIrr8RTF5GdPjyIaiqisgwMAxMAOcBd4rIvar6/jgFNFLCuMcC4TXuh8Kpo6Boxsc5sMD9Ujdl\n4FD9wFpNKUS1GKbNtBFE0dW7ycuIlmlNRiLyLhH5GfBx4N+By1X1HcCLgBtils9IC1mPBcJr3A8u\np46VY8Gm+O2c6ZPIvMJRGzW0sZbF8aqx/scjfP29O9l2cz9ff+9O1v/YQnHTjp8TwnnAG1V1f/Gg\nquZE5DXxiGWkjvb20t08QCbjjM8Ul9NF3zan9n+hFwA4Tun5kxlG51Yu/itPNMPOnVUd3VB0Utg3\nQNeqLueRAtYMSmM0jhvVdv1uz9DR0hH5cxX6QhdagRb6QgM1KZVtzIyqJwQRaQJuLFcGBVR1MBap\njPTR2godHWdPBNms89pl8fWNy+mi52HYdE9ThVN642OXsGCy9J/rggmh7/sT0zq6C+QGukF16qQQ\npGZQPSWgee36W+a3uD4DEHlJ6Wp9oY30UvWEoKqTIrJHRFaq6oFaCWWklNbWcAqgHI9TR8+p1fTc\n736fknDUf52g5+GyTjJ5R/eWy3Gtp5TbuITMu45O5Sj4tf/XU20dL0d3LZ8hSF9oIz34NRk9IiI/\nAZ4tDKrqa2OTypgdFJTLNLkNBSqil37R73rdltXj3klsa9eS69tBpneCXcO7WNu21peo4xPjrv7r\n8Yl0LnBuim7wiPuBPo6IosMtWdpcFn+3vtBGevCjEG6NXQpj9hLm1JHNuvoheq+lehJbZ2deKfhP\nXLvoGDx5rvt4vVDLiKLNN7SX+BAATs3NsPkGKz2RZqaNMlLVAbevWghnGFVpb3cc28VkMhxwWbih\nLImts5Ou/eK7EN7f3AsLTpeOLTjtjNcLtUyi23Z1K5+4uYPhliw5YLglyydu7jCHcsrxU7riKuAz\nwBpgLtAEPKuqHv/tDKNGeJicVo4PuddTKotI2j5yKee1Dvrqo3DtwSybto7Tux4OLHbCY/u2wfqD\nWb4Y8jFqFb1U6yS6bVe3+lIAaYjeSoMMacCPyeizwI3AN4ErgT8C/JeDNIwqhG6m42Jy6huisp7S\nVERSPnQ1H5H09HfWMOdN0yuFggmk5+FSE8gnbg4XolrrWkJpS6JLQy2lNMiQFnyVv1bVx4AmVZ1U\n1S8D18UrljEbiKuZjms9pe9l6Hm47MJ8RNKZ+7qB6nWPqplAyusG7T2y13eI6myvJZSG50+DDGnB\nzwnhhIjMBXaJyMeBQ1gfBSMCAlUwDYjfiKSCU9pPG043E4jb7vLg8YMVn/UK75zttYTS8PxpkCEt\n+FEIb8HxG/wFcAuwgohKVojIl4DXAIdV9bIo5jTqhzib6VTgEZFUnBw3k97MbrtLL7wifGZTLaFy\nU1pzptm1h7XX88dh659tf4Nq+Iky2q+qJ1X1GVX9qKq+J29CioKvYOanWYtX05ywzXRc8YhIKi+9\nEbQNZ5BdpNsCk9by2XHglu3tpgwAWua3+Pp8FNnis+lvMB2eCkFEHhaRh7y+ori5qv4I+G0Ucxn1\nR99Qe2U5ioDNdHwToPRGQSnsOLBj2mn97iK9Fpgg5TPqnSCnqdGTo74+H4Wtv3VhK23ntJWMtZ3T\n1pB/g+moZjJKReE6EdkAbABYGaayppE6Cjb+UFFGQQiQBNe1Xxi4eKKkGJ4bXgXy2s5pY/TkqC/T\nRtoif+IiyGnK7dqgtv4gkV7Dzw6XjA0/O8zieYtnxd+lGE+F4FXQrtao6iZgE8CVixZpwuIYEROk\nmU7oENUAbN/XBbc7JS6qkcYGOWnFy1bvda3fz7tdGySUtJ7qVMWNn34IV4nIT0XkuIicFpFJEXmm\nFsIZRoG4QlSr0tkJTO9PaF3YGnm10EbEzVYPIGVForzMa0Fs/UHMSxZldBY/4aOfBW4CHgXmA28D\n/iFOoQyjnGohqnES1MlseOPmL1lz/houPf9SXz6UIP6WIIt8ozZKmgl+W2g+JiJNqjoJfFlEfgF8\nMOzNReTrQDdwvog8CXxYVcNWAjAakJqGqJYxk3BUwx0vf0mQHtZ+rg1iXgraKKmR8XNCKElME5Fb\nfH5uWlT1JlVdpqpzVPUiUwaGF1GEqG5ZOsKqq3aS6epn1VU7A5mb7KRQXwQxL82mSK/p8JuYliGG\nxDTD8EvfUHtlfaIAIaoFH4RrjwSfjmmvk0IaC6Ot//EIb7triKWj4xxuybL5hnbPQnNplD8sQZ39\nsyXSazr8JqadAk4C3wH+T4SJaYbhC9f6RHs6fC/mUfkgyk8KaWytWehn3DY6Toaz/YzdmtynUX4j\nOaolpn1ORF6Q/3kx8Evgq8AvROSmGslnGFP0HG5l3/3ryA10s+/+dYFCTqP0QRQrhTQWRgvSzziN\n8keBKbqZUe2E8DJVfST/81uBvap6OfAi4P2xS2YYERLUBzGdvyHX51hbvVpoJhmyGKSfcaOGXDaq\nooubagqhuD/Uy4F/BlDVYffLDSO9BCmT4SvnobOT3MYlnvdLMmTRq2+x23ijhlw2qqKLm2oK4aiI\nvEZErgBeCnwfQESacfIRDKNu6Dncyh8faqMpByg05eCPD7W5mp18+xvWruX2wTVQlj+fdMji5hva\nOTW39L+2Vz/jRi3s1qiKLm6qRRn9OfD3QBvw7qKTwXrge3ELZiTIyEhFW0rPGkBBrk2QLUtHuG3Z\nMIVDwqTAbcuGeekziyuUQhB/Q8/hVt5y6aCjE4QZRelEHeVTiCbyE2XUqKU3LLdgZohq/ZQHunLR\nIn3wyiuTFqOxGRmBPXucbmIFMhn3yqBe17a1wejozBUKRK5kVl2107XP8sWnsuy7f92Mry1w3kv6\nGZtH4MS18po74CxcaYiDr/dw1HqXP0r6b+7/mapOu3j6ylQ2ZhFDQ6ULPEy1mqxYlL2uPVjUMSzf\nuxiYXqGMj8Pu3VC8San2+QAE2fXPJOfh6Qdmls0cV2G1sIvhyPERBo8MTr0enxxn8MggY6fGfFdx\nTRrLLQiOtcI0SnHrKuY17nVtOQWFUo6bQnE7sXp9PgArT7jvfdzGZ5rzMF02c3nv5ZHjI7E4P6MI\nudw7utd1/ODxgxbK2cDYCSFJ0mh/b26GCZeSz83NlfI2NcHkpL95wyiUoNe60PdDZcMr4cTcs2ML\nTjvjLK68PkhZ7mKqZTO7lWMO2kLSD1GcOibV3991tpaJblQ8FYKIvKfaB1X1k9GLM4twM5dEYBoJ\njZdPaXKyUl4R92vdcGtu5NXn2O/nA9Dzi0mYgN71cGAxrByDvm3Q8/CkU14xQqaUQlFzHa9FWhAy\nkonU+VnrkEsL5WwcqpmMFuW/rgTeAVyY/3o78Lvxi9bgVLPVJ4nXjl/V3bzT3FzalnKJR2x+S2WP\nXNc+x25KxqX3cWCyWXoehn2fhtxHne89DxNa0XiRG+gG1ak2nF6L5qRORl5YLYqQy+aMf+OBhXI2\nDtU6pn0UQER+BPyuqh7Lv/4IFnYaniC2+loSZNcOjnkp30gGgB0efYgPH4bFiytNZB0dNYkyor3d\nPSIqrKKpQm7jEjLvOsqu4V1VyzFH7fyMIuTykudcwu4ju9GiJAtBSl7PZF4j3fjZBrRSmrV8Oj9m\nhMFr4U26b7TXwll+OvDCzf9QGHczkXV0wDqXUM6ozWaF+Wrps1m7llzfDjK9R7n0gjU1i4uPIrfA\na46w8xrpxo9C+CrwExH5dv7164Hb4hNplhB0x7p3b2k45/LlsHq1//v5dWB7LZyDg5XXBsVvOGtc\ntLbW3j/T2UnX/gEGGOTSC9bUbDH9w4fgbXfB0lE43AKbb4BtVwebI2wzGzcsNyDdTKsQVLVPRO4B\nXpYfequq/iJesWYBQXas5coAzr72oxSCOrDdFs6CnOWUn2iCRB4VZGlwtu/r4rzWfnY/NViTjmuF\n8teFiqeF8teAZ0+EWhCk8b2RDH49RwuAZ1T1yyJygYg8V1Ufj1OwWYHfHWu5Mige96MQgiSbgftp\noqXFXY5yZ/Hq1e6niWrhrDt3piv0FiLPoH76gW7etrCfv/p0PyvHKCknEaSZjR+qlb9OUiHElYRn\nRMe0CkFEPowTadQBfBmYA9yOU/DOqAeCOLBHRkqzhQvZw14cPlyqlFpbYWys0ry1eHGliUzEURIF\nRRF36K1fs1nQDGqYft6RETb3n33ZNjrO+784yAseHeOV/z4cajdfrlCWjo6z5fLKENubHk72NGYV\nSNOPnxPCG4ArgJ8DqOpBEVkUq1RGtARxYD/6aGUuQrV6V+W7/pERGC6rkD487CiE8oiiiYlK81Jc\nfoUgZrOhIba8IFe2oKoTplou6969pSG5hXnHxkrrOZ0+TTlzJ+G12w/SVDYeZDfvZh66/XL48+vP\nJuHtXwIbroexc8rvVFuCNL43ksFP6YrT6lTAcwo6ipwTr0hGBcuXBxsvxy3e38uB7RUl5JfpzFPr\n1kF3t/MbVsHjAAAfm0lEQVTdy9cQh18hQN7HltXjbLjeWUhVzi6oWy53mXdy0rueU+E5xsc9larX\nf0CvJjfluJmH/mp9aUY2OK8/dG2ARMIYaNRS242EnxPCN0Tk88ASEfkz4E+AzfGKZZRQMMnMNMoo\nzpDLprJdZxDzlNfJJQ6/QgC5eq91X1B711N5SogJryY35bgpjgMupTgAxppDKvuQpKHUtkU5VcdP\nlNEnROTlwDM4foS/VtV7Y5fMKGX16mBhpuX4dWB7RQmJuO9yy2WqZp4qt+G3tDjmpFr4FQIonwPn\nuk9RsdBmMpDJsGXNhEtJDH9iHZsLcydgXtGv4HQTrs1s3DjckqWtTCmsHHNONeWkwTSTZAVSi3Ka\nHj9O5b9V1f8B3OsyZtSKWhXC84oSuvRS5/t0MnjlV7S0VNrwh4creyfE5VfwipJyUT4rjzexf1Gl\nUlx5vAmyzSXPv2XlGBtedLDCXg8+lIII555WxstN+wFqRG2+ob3EhwDwkX54+/XCeNNZBT4nJ7Sf\n765kvHbNUUc/xYmfnb9FOU2PHx/Cy13GXhm1IEYVCg7RYpv0nj3OeNS0tsKaNaX1idasOXvCKPYB\neOUwdHSUfr6jw1n03Wzto6O18SuMjvq7Lpej7weTLCjzAS84DX335iqev/eKUU/zUgUipb+XSy+F\nbJY7nw+r3g2ZDzvfv7lGedtd/mpabbu6lU/c3MFwS5YcMNySZfF5y/ncVuXiozjlu4/Cpu8of/hQ\n5ee9SmWf/4u9vO8re2gbHSfD2ein9T9OX6lrv+W+LcppeqpVO30H8F+BdhEp/qe0CPj3uAUzipjO\nIRr1ycHLvBQk27l83CvTOa7EtHJZA9ynsLOvNANpRWVUz8Y7bnZ81VKlvm/flAO7/ITx+a3+5d12\ndWvJzv3r791J2yjcvKv0uuEnKiOXvHbN9zcdZF6ZUowilyEOG77fnb9FOU1PNZPRPwH3AH8DfKBo\n/Jiq/jZWqYxSqjlEa1VCO2y57lrWbnKTNSA9D3uYfPr7z/68fDkrr4D9Lov/c044u/2qfoWTJ+n1\niAj64MvheYGldvCKUHIb99od/8YjsNxv9JMbcdnw/e78rc/y9FSrdjoGjAE3AYjIUmAesFBEFqrq\ngdqIOAsJ0oimVvWBgmY7l+O3dpPXs5ZHMwWV1S/5Qn5uiV0VC/rBg/T9kJIdPjhO4meyMJoP0K7m\nV/CKCHpy0cwVgpujuTBejteu+cJj3nPPFK+d/N7RvaFODX53/mmIcko70/oQROR6EXkUeBwYAPbh\nnBxCIyLXicgeEXlMRD4w/SdmAW7+ArfFrTyvoJg4zDBhy3V7+RbKlYmXQ9VrfGTEiRLq73e+j4wE\nf/4ymbZcju88hJ6HYdNWSuz1i8bhTNlWy8uvsHIsmKh+2HxDO6fmlv77ODU34xq55JUbcNXkct9z\n+KVaT4gwbTmD5De0Lmxl3Yp1dK/qZt2KdaYMyvCTh/C/gKuAH6rqFSLy+8Cbw95YRJqAf8BxWj8J\n/FREvqOqvw47d13j1We4udnZJRfb7/0WnIuCKEw+fkJfq5XPLsfLjOVVN8mLsvLbvWsHA+UhlJuX\nMh92v43baaBvG2x4fYYTTWf/5gsmM5zI5CracPqlYOP3EyHktWs+cnErn7h5caRRRl47+XKCRv7Y\nzj86/CiEM6o6KiIZEcmo6nYR+XQE934x8JiqDgGIyB3A64DZrRC8drfljWigsmZQAbfuZGGpVYOZ\nICYjLzOWiP8eDi4nDy8zjtd4OV55AG6ngZ6HgTUd9LYPcSA7zsrxLH1D7fQcbnXtzeyXckdzNbxy\nA4LM4Qc3G74XQSN/ksxvaCT8hJ0eFZGFwI+ALSKyEXg2gntfCDxR9PrJ/FgJIrJBRB4UkQefOnMm\ngtumHK8dt9u4Vyil3xDLIPg1+YQliMnIS3lOTlbK6lXmo5BfUcTKE+77JFfzzvz5FUN922BB2T/V\nBWeEvm0un1+zhp7Drey7fx25gW723b+OnsPO7zQ30A3AwOP97rLXGa0LWyvahXq16rTIn2Twc0J4\nHXAKuAXoARYDH4tTqGJUdROwCeDKRYuqVFlrEILsxINWMQ0bnlqLBjNBTEbVzFhusrq18HR5nr79\nl7Bh9W5ONJ/957ZgQuj72WLg6NkLC+VDyvpV9Iwuh0cXV+76J4BssL9BbqA71EkhbZTv5Msjj8Ai\nf5LET+mKZwFE5Fxga4T3/g2wouj1Rfmx2U2QukN+7fphQ0ZrSRCTUUxmrMIOvWJBPwJkT579uyzO\n25Bcyor0PDxCz78A40AWaMdboU7TDa+gFHYN72Jt29pQzxaEWmQqm/0/XfgpXfHnwEdxTgk5QHAq\nn4ZV4T8FLhGR5+IoghuBPww5Z2Pgdyfud0EMGzJaS4KYjIIoz4BKsedw65RiCPz5INf67Ia3+BSM\ncZQdB3bQubLMlxQDtey6Zvb/9ODHZPQ+4DJVPRLljVV1QkT+AvhXoAn4kqo+EuU9Gh6/C2LYkNFa\nEsRkBP6Vp5dSfPRRfwoliFINci+f3fCefqCb3181wMDFtalYmtaua0a8+FEI/wGciOPmqno3cHcc\nc88a/CyItcwSDkq5b8MrZDSsrNWit/xUVg2iVIPeyyfb93WRubg2/oQg2c5G4+BHIXwQ+LGIPIBj\nEQVAVd8Zm1RGtNQqZHQ6pit/XVhIy0ttRyGr33pGXrv+IGW9/eZBzCCbulZO5iDZzkbj4EchfB74\nN+BhHB+CUW/E2SDHL252dS9zSSbjLKp+ZPUbPeVV/toNt4V//nz38UwmdN0kV6p0w6uFUnArqx02\nUzkKrMFNvPhRCHNU9T2xS2LESy1CRgu4Rc24lb/2YnISXvay6a8L6uj1i1tE09GjlWMAJ0/6n9eN\nwkkpYDe86ZRC2AihINnOtcIa3MSPH4Vwj4hswAk5LTYZWcVTo5JqUTN+8dtCM4ij16s4oBsBGtSE\npqVlxt3wppTCvgG6VnVNjUcVIRR1pnJYrMFN/PhRCDflv3+waCyKsFOjEQjRd8CVIC0044qempio\nfK64CJlVXlAKxeGojRohZA1u4mfa0hWq+lyXL1MGhntl1mqUV2jNZBzzSHGJCbcqrsXNgIoJUuYj\nCE1NwZ4rDBHMndu4hMnJCXYc2AE0boSQVzkLK3MRHdU6pl2jqv8mIm90e19VvxWfWEYogpSpCFPS\nImjfgY6O6e9V3ICmGLeFM47oqUzGOaUEMTGFIYrTx9q15Pp2kOmdYNfwroaNELIGN/FTzWTUhRNd\ndL3LewqYQkgjcWXUuhFkd7t8efQ5E0Gip8pDWb1oawvm81iyBJ55ZmYNeQrKa5rSFb7o7MwrhaNs\nvmFNKiOEwmJlLuKnWse0QlX3j6nq48Xv5ctNGGkkioxavyUtvOoOlS++QRa4oLt+v9FTTU3+cgOG\nh6t3qCvn5MnKk081RVl4v6C83EqYu5Su8EVnJ137B/jriwfh5jWpihCKCitzES9+nMp3Ab9bNnYn\n8KLoxTFCE0VGrd+dv1c0TlNTZe8Gv8SVM+G3YU4u50Q5+e2nMD5eqZR27XIPU12yBNaWFacbHHSf\nt6x0hV8K2cx/vWyQbf+3O/DnjdlNNR/CpcALgMVlfoRzcXorG2kkiMklaEmLcn9D0LpDfqllzoQb\nExPOqaZ45+5lcnL7Xa1dW6kUliyBZcsqw2ljIDfQzZyXNU7JbKN2VDshdACvAZZQ6kc4BvxZnEIZ\nIQhicglyrZu/wYta1kiKos9DOSKO6cjPdV6LevlJoJq/JgbO3OeeuGaZvkY1qvkQ/gX4FxFZp6o7\nayiTEYYgJpcg1/qNKKpljaQgTvEgORKqlacBt9OBHyd1AS9/jRcRJMeVJ66NHB9h8MhZE9X45PjU\na1MKBvjzIbxBRB4BTgLfB14I3KKqt8cqmVFKkJ1wEJOL32uDOEprZe4J4hQPUssoCI8+Gn1EFri2\n9pwJub5mMr0TDDzeTybjUpID2Du61xSCAfjrqfwKVX0Gx3y0D3ge8N/jFMoowy0BbM+eYPV5wlIt\nCWzdOujudr7X0vYfxCkeR59p8O8vqfb7W7OmNDlvzZrofo+dneQ2LgFgUt0jp7zGjdmHr+J2+e+v\nBr6pqmNSy1ovRjo6nkWRBBa1vT+IUzzoDt1vlJFfqv3+4nair11L1/4B+i9Wp9/hLMH8JcHxoxC2\nishuHJPRO0TkApx2mkatSEPHs7DhoHH0dQ6ipIL4EArPVvysp0+7+wzcKqO6kXAJ8u37upCL+93f\nDOAKqReCVkY15eEwrUJQ1Q+IyMeBMVWdFJETwOviF82YIi0dz8LsZOM45QRZZN2Uh1soqdeufWTE\nPWdgBrkCUbNl6Qi97UMcyI6zcjxL31B7aT/oPC0nYXRB5efPC1nBO40EqYxqZbXPUi0P4f2q+vH8\ny/Wq+k0AVX1WRHqBD9VCwIbGrwklLR3P/OL2XHGdcvwqqdbWyqzgZctg8eLoI7LciOOEhKMMNnTs\n4USTM+/+eeNs6HDmLVcKG++Bt74OzhT9r58zAX9/D3zx+f7uF7bPQq0IUhnVymqfpdoJ4UagoBA+\nCHyz6L3rMIUQjiALRBo6noE/Beb1XHH1SvaSyatdZzHDw45CWLfO373SdkICetuHppRBgRNNOXrb\nhyoUQs/eLPzLOL3r4cBiWDkGfdtg/cEsX/Rxr6j6LNSCbFPWdfF3q4xqZbXPUk0hiMfPbq+NoARd\nIJLO3vWrwLyey8tBO39+9DKNjVX2anYLOY3KMe+nOF1MJ6QDWffPu463t9PzyB56Hj77t3h2Dnzq\nrf5OmvXUZ8GrMur1R1r4zKd3lpxwdq7wrzwanWoKQT1+dnttBCUNjuIg+FVgQeX3ak0ZRqYg+QZh\nf9/VOsQVK4WY/EArx7Psn1c578pxf9VhN7x6nH9aNkj2iekdqvXUZ8GtMur1R1r42j8OV5xwtr7z\nXH6ysPIZWua31FTmNFBNIfyOiDyDcxqYn/+Z/GurZRSWtDiK/eJXgUXRNc0vUdwn7O/bS/mUF6eL\nyQ/UN9Re4kMAWDCZoW/IX3XYVzWP8E8MTu2QqzlU663PQnll1M98eqfrCedgzn1TMnoyptyVFFOt\ndIXPeDpjRtSbo9ivAvN6rihj+qOiWi2iqInKD1TmG+lpbwc6fEUZudHbPlRhAC44VKF0h/2Xby7d\nYUO8fRaiDgX1Osn8ZpH79eZDMGpHWhzFfvGrwLyey63uPzj29jgoV0JuIaZBahFFQVg/kIfPpIcO\neg77dIyX4eWDKJwUikMxv/WcYXhHG5+5fdRXlFGYBT2OUFCvE86Fx+DJcyuvNx+CUVuSdhQHIWjR\nPK9IqbCdwYqpdmpxSyxzY+/ecH+D8jLZxeNRE0OkkpcPAnANxdx6/ihH/u/0yifsgh5HKOjmG9pd\nO8ldNdnGt2TYWnNiCsEIgl8F5hUKunp1tIlcQcpBePVqDts7ufA8USo6L2IIRHDzQaB4xhH6NaOE\nXdDjCAUtnGTK8yiOXNFKx/HFlqlMQgpBRP4z8BFgDfBiVX0wCTnqijjq/sdBTAlYrqTF7Ba1ovMi\nhkCEgq+h2AexPzvuqRSaM83sfGLntAtn2AU9SB5BELZd3epq4rLWnA5+qp3Gwa+ANwI/Suj+9UUa\nqp36pZpZIw5aW/1VW2322Pt4jaeR9nbnBFRMDIEItw+ucX4oc7EIwkRuoiIiaeR45b9Dr4Xb74Le\nfl47GSl91tlqxqklifxvUNVBAKua6pM0VDv1S1rzKy65BHbvLnUkizjj9UIEJ6LyukevOtLCbcuG\nK0pf3D64hjevGZw6KWSbskzkJipKZXuZgbwSw/wu6G55BHGacay4nUMdbY9mMWldZN1Ia36F12IK\nlX2O3UpfpMVEFyIQwa3u0ecuPIiW7csKpS8033ENhXUr1tG/r991XjfTThQLehAzTtoimuqV2BSC\niPwQaHN5qzffntPvPBuADQArk15UkiLORTbIwufn2vZ29514GvIr3CqY+i19EZcfJCbcKqC61T0q\nVwYF9ufDUafacD7eT7Y5mF2/Vnb5NEY01SuxKQRVvTaieTYBmwCuXLRodpbMiCuJLYgDuNriOTpa\nWkSulvH+YXbyQUpfpNVE54JXBdQTGf/JgU1Ff7KCUhifGCeTyaQuPDONEU31SlJOZSMIra3Q0VHa\nZrGjI/ziFMQBXG3xLHZ2e5VyiMOpHNbZHtTkFtZENzLimKf6+53vMQUFeFVAbQqglyfLs5cHuhGc\nhbZwIsg2Zelo6Uh8Fx1FRFOQ8UYmqbDTNwCfAS4Aviciu1T1D5KQpW6II4ktiG8i7GIYh78jrLM9\naN2lMCa6GobjemUfTwqV4aQe4aUtZyor1xROCpM6Sfeq7ggkjYYgIapuvoawDvBGIpETgqp+W1Uv\nUtWsqraaMkiIao3f/V4b5F5R75DDOtu9wjiXL48+vLOG4biulU7Jm4F8FrIfzzimp1VX7STT1c+q\nq3ayZekIuY1LmJycYNfwrkhlDoPfENWCr8GtkF9HS0fqTj5JYFFGjUiQTmx+HcBufgy/ZDKObyHq\nHbJX0x2v3AK330tHh/vvym8nNb/UMFLsVUda+McLD1acBMrNQNU43jTp0Ymtg1zfcTK9IcqWR4zf\niKZqvoZ1K9bNSgVQjimERiOoacKvA9gtbLPQhazc2d3WVupoLtQVijqXwktWt3Gv30tHh3vHtKhN\ndDFGipVHFB3PTLqeBJpywZSCZye2zk6ack7kUddzu0PLX6scAHMeT48phDQSR+SM28LrZa4I0rXN\n707arUE9hNshe9UhchtPOrkvpkgxt4gir/ZVkwJzcnCm2LpSpW6RGwX/xJn7ujnvJeGVQhQ5AH7n\niKscRiNhUUZpI67ImSCO4iCLtN/SEUH8FX4JMmfSyX0xRYq5RRR5LfAtZ5qQsjeb1Dk5FDMn5+5U\nhlL/xNMPdAMw8Hh/EJFLqGbGiXoOK4cxPXZCSBteO9m9e/3txIOYJmqZVRzHDrnemgzFECnmFVFU\nvvOfmxNAOJ0pPT5MZqDldBMLc80lSWyAr05suYFupKuf/sf7p0pcBDH5RGHGqTZHeSG+jpYOK1FR\nBVMIacNrxzo5edYUUs0vEGSRbGlxzxtoiaGXbByVSdNS7TRBqvUzKEZRRue4OOCB0TmTHBl4met7\n03Vi27J0hAW5zJTiCGryicKM4zVHQZ5iuTpaOli3wsVnZACmENKH39h4L/t3kEVy1KNn7MhIpVM4\nikU2jlyKemoyFAN9Q+289dLBaf0CZzJ4+ha8EtZ6DrdO24rTzWQVJEs4ihwAtzncmK3lKIJgCiFt\nuIWCeuGlOPwukmFPI0YqcPwCMy8PEiTyqJxqLTj9RA9FVQSvfA6LKJoZphDSiN/aP1Eki4U5jdQT\naa3CGpLe9qEKv4CXU7nJIxfhYo9ENjfKQ1yfc6aJ0bmVUV2C+I4eiqIIXvkcBd9BORZRVB2LMkob\nfjNXo3Cetrc7iWh+SGOp7SDUqLlMranqVC5iwWnoHqocR51ENj8UQlz3zxtHxQlxPdacY065pUZB\nVUNHD4XBIopmhp0Q0ka1hbewy42iTHWBWp1GguAlf5j8jAZ1QHs5lVtOwMIzcGAxrByDvm3Qey2u\nCWt3nz8Kj01/Lzd/wemM0nK6mYW5phLn85vXuOed1MpkU+sGO42CKYR6wi2jtpwgmcpBTyNuC3Jh\nnpkusuVzlmc/R9mjoAEd0H1D7ZXhoRPCxu8rPQ8XXZjJ8JY3ujtdPU8ZPq/77ZwJjgx0loz1tg+5\nKqpammysT3JwTCHUO+UL6sSE/4zcIKcRKM02Hh+vzD4Ouki7KS+vXgR13qMgLgpRQBXhoRNAtlRR\nrxx3X6S9iuG5Xef3826Kykw26ccUQtoI4vx0W1C98JrTa7z8NHLffd5zFxNkkXZLwgtKvfs2IsA1\nPLSVir9B35C/ZDMvXE8jHp8vVlSF7msd58/OCqL1hDmV00YQ52eQBdVNoQS5l1fdIDf8LtJRLOZ1\nHiVUS3oOt7JpTwcXn8oiChefyrJpT8e0uQYz/XzP4Vb23b8OzTfX2f2URz0rIzXYCSFtBHF++l1Q\nvRb5uBytUS/ShQqqbpVV6zxKqNb4STaL4/PFvZmjqJBqxIMphDTi1/npZfJpboamJn+LfNSO1qgW\nabeIqqh7FBg1paAUdhzYQefKzuk/YNQcUwj1jFfdoksuqe1C6Tcc1utzbuO16FFg1Jyu/cLAxRMM\n7Buga1VX0uIYZZgPoZ6JqaSyK8uXe4/7KX/tRoMmixnebN/XRa6vGVRDlc024sFOCPVOrXbNq1c7\n34vDP5cvPzs+Exo0WcyYhs5Ocht3kXlXetpwGg6mEAz/rF4dTgG4YWag2cnatYA5mdOGmYwMw0iE\n3EA3EK7jmhEtphAMw0gMUwrpwhSCYRiJYkohPZhCMAwjcUwppANTCIZhpAJTCsljCsEwjNQwpRT2\nDSQryCzFFIJhGKkiN9ANquw4sCNpUWYdiSgEEfk7EdktIg+JyLdFZEkSchiGkU5yG5cwOTnBruFd\nSYsyq0jqhHAvcJmqvhDYC3wwITkMw0gja9fSlIOxk0dNKdSQRBSCqv5AVSfyL+8HLkpCDsMw0suZ\n+7pZfMpRCkZtSIMP4U+Ae7zeFJENIvKgiDz41JkzNRTLMIykefqBbqdCqkUe1YTYFIKI/FBEfuXy\n9bqia3qBCWCL1zyquklVr1TVKy+YMycucQ3DSCnb9zllsk0pxE9sxe1U9dpq74vIzcBrgPWqqnHJ\nYRhG/WMd12pDUlFG1wHvB16rqieSkMEwjPrCEtfiJykfwmeBRcC9IrJLRD6XkByGYdQRBaVgOQrx\nkFSU0fNUdYWqrs1/vT0JOQzDqD9yfc1MTk6YUoiBNEQZGYZh+Kezc0opGNFiCsEwjPqjs9PCUWPA\nFIJhGHXJ9n1dLD5lTuYoMYVgGEbd8vQD3TTlTClEhSkEwzDqmjP3dQOmFKLAFIJhGHWP5ShEgykE\nwzAaAlMK4TGFYBhGw2BKIRymEAzDaChMKcwcUwiGYTQcuT6nbqcphWCYQjAMo/Ho7CS30TrzBsUU\ngmEYjcnatYCdEoJgCsEwjIYlN2CJa0EwhWAYRkNjiWv+MYVgGEbDY5FH/jCFYBjGrMCUwvRIPbUz\nFpFjwJ6k5YiB84EjSQsRA436XNC4z9aozwWN+2x+nutiVb1guomao5GnZuxR1SuTFiJqRORBe676\nolGfrVGfCxr32aJ8LjMZGYZhGIApBMMwDCNPvSmETUkLEBP2XPVHoz5boz4XNO6zRfZcdeVUNgzD\nMOKj3k4IhmEYRkyYQjAMwzCAOlMIIvI/ReQhEdklIj8QkeVJyxQVIvJ3IrI7/3zfFpGGKNUoIv9Z\nRB4RkZyI1H3In4hcJyJ7ROQxEflA0vJEhYh8SUQOi8ivkpYlSkRkhYhsF5Ff5/8dvitpmaJCROaJ\nyE9E5Jf5Z/to6DnryYcgIueq6jP5n98JPF9V356wWJEgIq8A/k1VJ0TkbwFU9X8kLFZoRGQNkAM+\nD7xPVR9MWKQZIyJNwF7g5cCTwE+Bm1T114kKFgEi8p+A48BXVfWypOWJChFZBixT1Z+LyCLgZ8Dr\nG+RvJsA5qnpcROYAO4B3qer9M52zrk4IBWWQ5xygfrTZNKjqD1R1Iv/yfuCiJOWJClUdVNVGyS5/\nMfCYqg6p6mngDuB1CcsUCar6I+C3ScsRNap6SFV/nv/5GDAIXJisVNGgDsfzL+fkv0KtiXWlEABE\npE9EngB6gL9OWp6Y+BPgnqSFMCq4EHii6PWTNMjiMhsQkVXAFcADyUoSHSLSJCK7gMPAvaoa6tlS\npxBE5Ici8iuXr9cBqGqvqq4AtgB/kay0wZju2fLX9AITOM9XF/h5LsNIEhFZCNwFvLvM0lDXqOqk\nqq7FsSi8WERCmftSV8tIVa/1eekW4G7gwzGKEynTPZuI3Ay8BlivdeTcCfA3q3d+A6woen1RfsxI\nMXn7+l3AFlX9VtLyxIGqHhWR7cB1wIwDA1J3QqiGiFxS9PJ1wO6kZIkaEbkOeD/wWlU9kbQ8his/\nBS4RkeeKyFzgRuA7CctkVCHveP0iMKiqn0xanigRkQsK0YgiMh8n2CHUmlhvUUZ3AR04USv7gber\nakPs0ETkMSALjOaH7m+ECCoReQPwGeAC4CiwS1X/IFmpZo6IvAr4NNAEfElV+xIWKRJE5OtAN04p\n5RHgw6r6xUSFigAR6QTuAx7GWTcAPqSqdycnVTSIyAuB23D+LWaAb6jqx0LNWU8KwTAMw4iPujIZ\nGYZhGPFhCsEwDMMATCEYhmEYeUwhGIZhGIApBMMwDCOPKQTD8ImIvF5EVEQuTVoWw4gDUwiG4Z+b\ncCpK3pS0IIYRB6YQDMMH+Vo4ncCf4mQoIyIZEfl/+T4W94rI3SLypvx7LxKRARH5mYj8a74Ms2Gk\nGlMIhuGP1wHfV9W9wKiIvAh4I7AKeD7wFmAdTNXO+QzwJlV9EfAloCEymo3GJnXF7QwjpdwEbMz/\nfEf+dTPwTVXNAcP54mLglFe5DLjXKaVDE3CotuIaRnBMIRjGNIjIc4BrgMtFRHEWeAW+7fUR4BFV\nXVcjEQ0jEsxkZBjT8ybga6p6saquyvfjeBynw9gNeV9CK05xOIA9wAUiMmVCEpEXJCG4YQTBFIJh\nTM9NVJ4G7gLacLqm/Rq4Hfg5MJZvr/km4G9F5JfALuDq2olrGDPDqp0aRghEZGG+yXkL8BPgpao6\nnLRchjETzIdgGOH4br5JyVzgf5oyMOoZOyEYhmEYgPkQDMMwjDymEAzDMAzAFIJhGIaRxxSCYRiG\nAZhCMAzDMPL8f2I4Lp2zH4gCAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f62a991e7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_train, y_train\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j)\n",
    "plt.title('SVM (Training set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第九步：测试集合结果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n1pPjhAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f62a991c940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_test, y_test\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j)\n",
    "plt.title('SVM (Test set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<b>完整的项目请前往Github项目<a href=\"https://github.com/MachineLearning100/100-Days-Of-ML-Code\">100-Days-Of-ML-Code</a>查看。有任何的建议或者意见欢迎在issue中提出~</b>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
